package quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * <h1></h1>
 *
 * @author zhh 2019-06-03
 */
public class CronTriggerSchedule {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        // 打印当前的执行时间
        System.out.println("Current Exec Time is: " + LocalDateTime.now());
        // 创建一个 JobDetail 实例，将该实例与 SimpleTriggerJob.class 绑定
        JobDetail jobDetail = JobBuilder.newJob(CronTriggrtJob.class).withIdentity("myJob").build();
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .withSchedule(
                        // 格式：[秒] [分] [小时] [日] [月] [周] [年]
                        CronScheduleBuilder.cronSchedule("* * * * * ?")
                )
                .build();
        // 2019年内每天10点15分触发一次
        // 0 15 10 ? * * 2019
        // 每天的14点整至14点59分55秒，以及18点整至18点59分55秒，每5秒钟触发一次
        // 0/5 * 14,18 * * ?
        // 每月周一至周五的10点15分触发一次
        // 0 15 10 ? * MON-FRI
        // 每月最后一天的10点15分触发一次
        // 0 15 10 L * ?
        // 每月的第三个周五的10点15分触发一次
        // 0 15 10 ? * 6#3

        // 创建 Schedule 实例
        StdSchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
        Date date = scheduler.scheduleJob(jobDetail, trigger);
        System.out.println(date);
        // scheduler执行2秒后挂起
        Thread.sleep(2000L);
        // scheduler.standby();
        scheduler.shutdown(false);
        // scheduler.shutdown();
        // scheduler挂起3秒后继续执行
        // Thread.sleep(3000L);
        // scheduler.start();
        System.out.println("scheduler is shutdown?"+scheduler.isShutdown());
    }
}
